// 引入axios
import axios from 'axios';
import {
    Message
} from 'element-ui';
import {
    getLocal,
    removeLocal
} from "@/utils/local"
// 引入router实例， 调用它的push方法
import router from '@/router/index'
// 单独引入element  message组件


// 2.创建axios的副本：axios.create({ 修改一些axios默认值,返回一个新的axios })
const _fetch = axios.create({
    baseURL: process.env.VUE_APP_URL,
    // withCredentials: 表示跨域请求时是否需要使用凭证， 默认为false
    withCredentials: true,
})

// 添加请求拦截器
_fetch.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    
    // 设置全局的传说token, 只要发送请求， 就将token 传过去
    config.headers.token = getLocal();
    // window.console.log("config", config);
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

// 添加响应拦截器
_fetch.interceptors.response.use(function (response) {
    // 对响应数据做点什么
    if (response.data.code == 200) {
        // 当用户输入的手机号与验证码都为正确
        // 才返回数据
        return response.data;
    } else if (response.data.code == 206) {
        // 问题，当用户退出登录后还可以访问页面
        // 我们应该将没有携带token的用户打回去 , 即：只要返回的数据的状态码为206，则是token错误
        // 1.清除token
        removeLocal(); 
        // 2.打回登录页   问题,这里是js文件，无法用this访问vue实例
        //               解决, 将路由文件里的router实例导出， 再在此导入即可, router就是路由实例
        router.push('/login')
        // 3.将错误抛出
        return Promise.reject(response.data.message);
        

    } else {
        // 当错误时,返回一个状态为以失败的promise实例
        // alert(response.data.message)
        Message.error(response.data.message)
        return Promise.reject(response.data.message);
    }
}, function (error) {
    // 对响应错误做点什么
    return Promise.reject(error);
});

export default _fetch